package com.example.shop.goods.service;

import com.example.shop.common.api.ServiceReturn;

import com.example.shop.goods.dto.*;
import com.example.shop.pojo.Merchant;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface GoodsService {

    /**
     * 删除商品
     * @param merchant 该操作关联的商家
     * @param goodsId 要删除的商品id
     * @return
     */
    ServiceReturn<Boolean> deleteGoods(Merchant merchant,long goodsId);
    /**
     * 该店铺发布新的商品
     * @param merchant 该操作关联的商家
     * @param newGoodsInfo 新商品的信息
     * @return 返回新发布的商品详细信息的业务处理结果
     */
    ServiceReturn<MerchantGoodsDetailBrowseInfo> saveGoods(Merchant merchant,NewGoodsInfoParam newGoodsInfo);

    /**
     * 修改商品基本信息
     * @param merchant 该操作关联的商家
     * @param modifyBaseInfo 修改后的商品的基本信息
     * @return 返回修改状态的业务处理结果
     */
    ServiceReturn<Boolean> modifyGoodsBaseInfo(Merchant merchant,ModifyGoodBaseInfoParam modifyBaseInfo);

    /**
     * 添加新的商品款式
     * @param merchant 该操作关联的商家
     * @param newStyle 新的商品款式
     * @return
     */
    ServiceReturn<GoodsStyle> addGoodsStyle(Merchant merchant, NewGoodsStyle newStyle);

    /**
     * 修改款式信息
     * @param merchant 该操作关联的商家
     * @param modifyStyle 修改款式信息
     * @return 返回修改状态的业务处理结果
     */
    ServiceReturn<GoodsStyle> modifyGoodsStyle(Merchant merchant, ModifyGoodsStyleParam modifyStyle);

    /**
     * 删除款式。要删除的商品的款式会至少保留一个，即不能全删除
     * @param merchant 该操作关联的商家
     * @param goodsId 要删除的款式所属的商品id
     * @param goodsClass 要删除款式的款式名
     * @return 返回删除状态的业务处理结果。如果删除成功返回true，如果没有删除(没有一行被删除)则返回false
     */
    ServiceReturn<Boolean> deleteGoodsStyle(Merchant merchant,long goodsId,String goodsClass);


    /**
     * 添加商品的描述图片
     * @param merchant 该操作关联的商家
     * @param goodsId 要添加商品描述图片的商品id
     * @param describePictureList 描述图片
     * @return 返回业务处理后的图片请求url列表
     */
    ServiceReturn<List<String>> addDescribePicture(Merchant merchant, long goodsId, List<MultipartFile> describePictureList);

    /**
     * 删除商品的描述图片
     * @param merchant 该操作关联的商家
     * @param goodsId 要删除商品描述图片的商品id
     * @param describePictureName 要删除的描述图片的名，带后缀
     * @return 返回删除状态，删除成功返回true
     */
    ServiceReturn<Boolean> deleteDescribePicture(Merchant merchant, long goodsId,String describePictureName);

    /**
     * 添加商品的详细图片
     * @param merchant 该操作关联的商家
     * @param goodsId 要添加商品详细图片的商品id
     * @param detailPictureList 详细图片
     * @return 返回业务处理后的图片请求url列表
     */
    ServiceReturn<List<String>> addDetailPicture(Merchant merchant, long goodsId, List<MultipartFile> detailPictureList);

    /**
     * 删除商品的详细图片
     * @param merchant 该操作关联的商家
     * @param goodsId 要删除商品详细图片的商品id
     * @param detailPictureName 要删除的详细图片的名，带后缀
     * @return 返回删除状态，删除成功返回true
     */
    ServiceReturn<Boolean> deleteDetailPicture(Merchant merchant, long goodsId,String detailPictureName);
}
